←
▼
▲
コマンドライン・オプションを指定して起動すると、メニューから選択することなく、自動的に
テストの実施などを行うことができます。
@echo off
echo テストのビルド・ステップを実行します。
pause
cscript Test.vbs /Build
サンプル: BuildTest.bat
/Build
Test_build 関数を呼び出します。 呼び出したら、プロセスを終了します。
次のオプションがあります。
/Case:TestSymbol
TestSymbol に指定したテスト・シンボルの Test.vbs を選択します。
/Case オプションが無いときは、すべての Test.vbs を選択します。
Test_setup 関数を呼び出します。 呼び出したら、プロセスを終了します。
/Setup
/Check
Test_check 関数を呼び出します。 呼び出したら、プロセスを終了します。
Test_start 関数を呼び出します。 呼び出したら、プロセスを終了します。
/Start
Test_clean 関数を呼び出します。 呼び出したら、プロセスを終了します。
/Clean
/All
Test.vbs の Test_build, Test_setup, Test_start, Test_check, Test_clean を
呼び出します。 呼び出したら、プロセスを終了します。
関連
VBS から Test.vbs を呼び出す
テスト
→ T_Prpt フォルダ
/log
テストのログのファイル名。 デフォルトは、"Test_logs.txt"
←
▼
▲
Test_start などでエラーが発生しても、エラーがあったことを表示して、Test_logs.txt に記録
するだけで、次のテスト関数を呼び出しに行きます。
[FAIL] Fail the Test
in "Test_start" function in "C:\home\vbslib_pack\_src\T_Priority\Test.vbs"
Test_logs.txt には、エラーが発生した Test.vbs のフル・パスと、テスト関数が記録されて
います。
Test_logs.txt に記録されている Test.vbs を
で実行すると、問題がある
場所でブレークします。
多くの場合、テスト対象のプログラムの出力値チェックでエラーになっているので、Test.vbs を
で実行します。
FCBat を使っているときは、
Test_logs.txt を「書き込みできない」とき、テスト・プロンプトが二重に起動して同じファイルを
開こうとしているときがあります。 そのときは、下記の /log オプションを指定して Test.vbs を
起動するか、Main 関数の先頭で、m_DefLogFName にログ・ファイルの名前を設定してください。
cscript Test.vbs /log:TestTarget_logs.txt
Sub Main( Opt, AppKey )
g_Test.m_DefLogFName = "TestTarget_logs.txt"
RunTestPrompt AppKey.NewWritable( "." )
End Sub
テスト・プロンプト自体をデバッグするときは、デバッグモード(Script) で実行してブレークする
場所に、Stop 命令を記述し、cscript.exe //x で、Test.vbs を実行してください。
Sub main2( Opt, AppKey ):set_input "5." :RunTestPrompt AppKey.NewWritable( "." ):End Sub
1.エラー状況を確認する
2.繰り返し実行する環境を作る
テスト・プロンプトへの入力を自動化することで、繰り返しテストを実行することを簡単にします。
Tests.vbs
3.デバッガに接続して、問題のある場所で止める
5.
で、テストを1つだけ指定したときは、Test_log.txt に記録されます。
関連
AutoDiff モードを有効にすると、テストが失敗したとき、テスト・ログの中にコマンドプロンプトの
テストに Fail したときの対応のヒントを説明します。
(旧版)
の出力(テキストの差分表示)があれば、Diff ツールを起動します。
Diff ツールの設定
Sub Main( Opt, AppKey )
g_Test.m_bAutoDiff = True
RunTestPrompt AppKey.NewWritable( "." )
End Sub
テスト
廃止されました。
ver4 では、m_bAutoDiff_ に変えると動きますが、今後は無くなります。
を使ってください。
←
▼
▲
T_SomeTests
Test.vbs
Test.vbs
T_UnitTest1
Test.vbs
T_UnitTest2
Test_current
Test_build
Test_setup
Test_check
Test_clean
12
11
10
ALL テストを行うと、すべての Test.vbs ファイル(起動時のファイル名と同じ名前の
ファイル)の Test_current を読んだ後に、すべての Test.vbsファイルの Test_build を
呼び出す…、と繰り返していきます。
Test_current, Test_build, Test_setup, Test_start は、Tests::AddTestScript した順に、
Test_check, Test_clean は、Tests::AddTestScript した順と逆に呼ばれます。
Tests::AddTestScriptAuto は、親フォルダから追加していくので、
Test_current, Test_build, Test_setup, Test_start は、親フォルダから、
Test_check, Test_clean は、子フォルダから呼ばれます。
Test_start
AddTestScriptAuto
追加順序
2
3
1
数字に書いてある順番に Test_current 関数などがコールバックされます。
ただし、同じ深さの T_UnitTest1 と T_UnitTest2 の順番は変わることがあります。
6
5
4
2
3
1
9
8
7
14
13
15
16
17
18
Tests::CurrentTestPriority を設定することで、テストの順番を変えることができます。
テスト・プロンプトは、サブフォルダにある Test.vbs (起動時のファイル名と同じ名前の
ファイル)も呼び出します。 (TestCommon_Data.xml の
によって実施するテストは制限できます。) その呼び出す順序を説明します。
(ver4) テストに失敗したら、そのテストの続きの関数はコールバックされません。
たとえば、T_UnitTest1 の Test_start 関数内でエラーが発生したら、T_UnitTest1
の Test_check, Test_clean 関数はコールバックされません。
(ver4) テストをスキップしたら、そのテストの続きの関数はコールバックされませんが、
Test_clean 関数はコールバックされます。 たとえば、T_UnitTest1 の Test_start 関数
内で Skip 関数を呼び出したら、T_UnitTest1 の Test_check 関数はコールバックされ
ませんが、T_UnitTest1 の Test_clean 関数はコールバックされます。
関連
(ver4) Test_build 関数と Test_setup 関数と Test_start 関数は、親フォルダーの
テストに失敗があれば、子フォルダーの同じ名前の関数はコールバックされません。
Test_check 関数と Test_clean 関数は、子フォルダーのテストに失敗があれば、
親フォルダーの関数はコールバックされません。
テスト
呼び出し順序を確認する
←
▼
▲
WaitForFile で待つ
Setting_getEditorCmdLine などを、プログラムを起動しないようにする
各テスト項目の最初で、存在する可能性のあるすべてのファイルを削除する関数を呼ぶ。
よくある、すでに存在するファイルがあるときは、そのテンプレートからコピーする
実際にテストを実行する前に、スクリプトで、自動的に行われる動作の説明と、手動で操作する内容と
確認する内容を表示して、pause 関数を呼び出してください。
手動テストが存在することを知らせるために、Test_start 関数で、ManualTest 関数を呼び出してください。
echo_line
EchoTestStart "T_Sample"
echo "〜されるので、〜してください。"
echo "〜であること。"
pause
echo_line
(手動テストの自動部分の処理)
参考
→ samples/Test/T_TestByManual フォルダ
Dim e, e2 ' as Err2
'// Error Handling Test
echo vbCRLF+"Next is Error Test"
If TryStart(e) Then On Error Resume Next
...
If TryEnd Then On Error GoTo 0
e.CopyAndClear e2 '// Set "e2"
echo e2.desc
Assert InStr( e2.desc, "SomeError" ) >= 1
Assert e2.num <> 0
エラーの情報を Err2::CopyAndClear でコピーしてから、チェックしてください。
g_debug を設定したときに、Fail したところで正しくブレークするようになります。
Dim t, t2
For Each t In DicTable(Array( _
"Case", "SrcPath", "AnsPath", Empty, _
"Default", "sample1.xml", "sample1_replaced.xml", _
"UTF8_BOM", "sample6_utf8bom.xml", "sample6_utf8bom_replaced.xml", _
"Unicode", "sample3_unicode.xml", "sample3_unicode_replaced.xml" ))
For Each t2 In DicTable(Array( _
"Case2", "DstPath", "OutPath", Empty, _
"DstNormal", "out.xml", "out.xml", _
"DstEmpty", Empty, "out.xml", _
"DstOverWrite", "out.xml", "out.xml" ))
Dic_add t, t2 : t2.RemoveAll '// cross join
'//=== setup files
...
'//=== Do test '//##################################### Test Point
Assert Convert( t("SrcPath"), t("DstPath") ) = t("AnsPath")
Next
Next
テストケースの組み合わせは多重ループで記述します。 ただし、組み合わせは必要最低限にして
ください。 テストのパラメーターは、
記述しやすくなります。
実際にテストを行うコードは、ループの最後の方にあります。
関連
→ TestNums
を使うと
DicTable
DicTable
Dic_add
→ SQL JOIN
Sub T_Example( Opt, AppKey )
Set w_= AppKey.NewWritable( "_log.txt" ).Enable()
RunProg "cscript //nologo T_Wildcard.vbs T_Example_Main", "_log.txt"
AssertFC "_log.txt", "T_Example_ans.txt"
del "_log.txt"
Pass
End Sub
Sub T_Example_Main( Opt, AppKey )
echo GetTestResult()
Pass
End Sub
RunProg で子プロセスを起動し、その出力をファイルにリダイレクトします。
子プロセスで実行するスクリプトは、直接起動することもできます。 たとえば、下記のスクリプト
では、T_Example_Main を起動します。
関連
チェックするところではなく、エラーが発生した場所でブレークするには、次のように e.Raise
...
If TryEnd Then On Error GoTo 0
e.Raise
e.CopyAndClear e2 '// Set "e2"
を記述して、一旦
を無効にし、/g_debug オプションに設定する値を
変更します。
←
▼
▲
TestPrompt.vbs
ターゲットプログラム
メニューを表示
(UnitTest).vbs
を再ロード
Test_start
などをコールバック
起動
結果を報告
TestPrompt_Setting.vbs
をロード&SetTest をコール
テストを実行
メニューを表示
テストスクリプトを起動すると、テストプロンプトが起動します。
ユーザがメニューから選択すると、テスト・プロンプトからコールバック
されるので、テストの実施などを行います。
同一プロセス内
各テスト項目
テスト・プロンプト・エンジン
テスト対象
プロセス
インクルード
テスト実施
出力データ
チェック
出力
(src)
(src)
(src)
TestScript::Finish
←
▼
▲
.m_Tests
.m_Menu()
MenuItem
.Sets
Dic< UnitTest >
.CurrentTest
in RunTestPrompt()
(src)
(src)
g_Test
Tests::DoAllTest
(src)
section
←
▼
▲
別の VBS ファイルを呼び出したり、ログをとったりします。
全テストのとき、ユニットテストのとき、デバッグのとき、という状況に応じて、
テストスケジューラは、臨機応変にテストスクリプトを呼び出します。
テスト処理が失敗したら、テストスクリプトからテストスケジューラに return 的に戻り、
テストスケジューラは、次のテストスクリプトを実行します。
テスト
スクリプト
テスト
スケジューラ
Do_
cscript.exe など
プロセス起動
Tests クラスをユーザから使うためのコマンドプロンプトです。
テストをスケジューリングするクラスです。
テストスクリプトを呼び出すクラスです。
→ テストツールの接続場所
参考
テスト
→ TestsClass フォルダ
Dim ts : Set ts = new Tests
ts.AddTestScriptAuto ".", "Test.vbs"
ts.DoAllTest
サンプル
←
▼
▲
テスト・プロンプトに関する設定を記述したファイルです。
通常、編集しなくてもそのまま使えます。
テストシンボルと、ユニット・テスト・プロンプトの VBS ファイルのあるパスの
対応関係を記述します。
テスト・プロンプトのメニュー項目を記述します。
prompt.m_Menu(1).m_Caption = "1. Do ALL Test"
prompt.m_Menu(1).m_OpType = prompt.Op_AllTest
fo = "test\"
Set t= tests.AddTestScript( "T_Fold1", fo+"T_Fold1.vbs" )
tests.AddTestScriptAuto tests.BaseFolderPath, "Test.vbs"
または
に設定を記述してください。
サンプル
→ TestPrompt_Setting_default.vbs # Setting_buildTestPrompt
←
▼
▲
Sub RunTestPrompt( Opt )
(src)
Opt
Empty または、Test.vbs のパス、または Writables オブジェクト
【引数】
テスト・プロンプトを開きます。
Opt に Empty を指定すると、サブフォルダにある Test.vbs もテストします。
Opt に
のパスを指定すると、そのテストだけをテストします。
Opt に Test.vbs のパスを指定しなかったときのログのファイル名は、Test_logs.txt、
指定したときのログのファイル名は、Test_log.txt になります。
Sub main2( Opt, AppKey )
RunTestPrompt AppKey.NewWritable( "." )
End Sub
サンプル
コールツリー
RunTestPrompt
main2
TestPrompt::DoPrompt
TestPrompt::DoTest
Opt に Writables オブジェクトを指定すると、その設定を使い、、サブフォルダに
ある Test.vbs もテストします。
(Test_build など) を呼び出します。
テスト・プロンプトで選択したメニュー項目によって、
関連
Opt に
のオブジェクトを指定できます。
←
▼
▲
ソース
.Writable
.ExpectedPassConut
Writables
integer
の設定。
→ TestPrompt.vbs
string
.TestTargetVBS_Path
テスト対象の Test.vbs のパス
に指定します。
←
▼
▲
をユーザから使うためのコマンドプロンプトです。
.DoPrompt
(src)
(src)
←
▼
▲
テストをスケジューリングするクラスです。
現在設定されているテストシンボル、 "T_ALL"など
as string
as string
テストツリーのベース(ルート)フォルダのパス
テストの優先度
as string
現在実行しているテストのテストシンボル
(src)
フォルダに含まれるすべての Test.vbs をロードします。
.CurrentTest
as
現在実行しているテストの情報、
実施を行うテスト・シンボルを読み込む
テスト
→ [T_LoadTestSet]
→ T_TestSet フォルダ
を有効にするかどうか
の引数です。
←
▼
▲
Function Tests::AddTestScriptAuto( BasePath, FName )
(src)
フォルダに含まれるすべてのテスト項目スクリプト(Test.vbs)が呼び出せるようにします。
【引数】
BasePath
FName
検索するフォルダ
テスト項目スクリプトのファイル名(通常 Test.vbs)
返り値
なし
テスト
←
▼
▲
Function Tests::AddTestScript( Symbol, FileName )
テスト項目スクリプト(Test.vbs)が呼び出せるようにします。
【引数】
Symbol
FileName
テストシンボル
テスト項目スクリプトのファイル名(通常 Test.vbs)
返り値
なし
(src)
←
▼
▲
Dim Tests::CurrentTestPriority as integer
呼び出し順序を決めるための、現在のテストの優先度
Sub Test_current( tests )
tests.CurrentTestPriority = 850
End Sub
(src)
デフォルトは 1000 です。
サンプル
参考
値の例:
・ソースをビルドする = 700番台
・テスト・ライブラリをビルドする = 800番台
・テスト・プログラムをビルド&実行する = 900番台
・サンプル・プログラムをビルド&実行する = 1000番台
←
▼
▲
Dim Tests::Symbol as string
現在のテストの識別子(テスト・シンボル)
デフォルトは、Test.vbs があるフォルダーの名前です。
参考
←
▼
▲
Function Tests::SetCurrentSymbol( Symbol as string ) as integer
現在のテストの識別子(テスト・シンボル)を選択します。
全てのテストを選択するときは、"ALL" を指定してください。
返り値は、0=成功、1=失敗
←
▼
▲
GetCallingOrder (Tests)
Sub Tests::GetCallingOrder( out_UnitTests as UnitTest )
(src)
を取得します。
←
▼
▲
Sub Tests::DoAllTest()
(src)
コールツリー
Tests::DoAllTest
すべてのテストを実施します。
参考
TestScript::Do_
関連
call_vbs_t
Test_start など
(src)
TestScript::Finish
ShakerSort_fromDic
TestScript::Start
テストする順番を整列する
テスト・スクリプトへコールバックする
参考
g_fs.OpenTextFile
ExecuteGlobal
If en <> 0 Then Err.Raise en,, ed
'//=== Echo the Test title
echo
If en = E_TestPass Then
TestScript::m_nPass = m_nPass + 1
テストの結果をまとめる
For Each CurrentTest '// as UnitTest
( CurrentTest.ScriptPath, "Test_start", Me as Tests )
テストのループ
Tests::OnTestFunctionSetup
m_Symbol = Me.CurrentTest.Symbol
TestScript::m_nPass = 0
テストの集計をリセットする
m_Symbol = Me.CurrentTest.Symbol
Tests::OnTestFunctionFinish
( CurrentTest.ScriptPath, "Test_current", Me as Tests )
(src)
TestScript::Do_